package com.operator.Activitys.activity;

import android.os.Handler;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
import com.google.gson.Gson;
import com.jaredrummler.materialspinner.MaterialSpinner;
import com.operator.Activitys.R;
import com.operator.Activitys.activity.base.BaseActivity;
import com.operator.Activitys.bean.Back;
import com.operator.Activitys.bean.ShopConfirmMsg;
import com.operator.Activitys.bean.State;
import com.operator.Activitys.bean.User;
import com.operator.Activitys.http.manager.UserManager;
import com.operator.Activitys.utils.Constant;
import com.operator.Activitys.utils.ToastUtils;

import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.OnClick;

/**
 * 项目名称：金泽云 手机app
 * 类描述：店铺认证 修改个别信息
 * 创建人：张飞祥
 * 创建时间：2018/5/7 10:04
 * 修改人：张飞祥
 * 修改时间：2018/5/7 10:04
 * 修改备注：
 */
public class ShopUpdateConfirmActivity extends BaseActivity {

    //返回按钮
    @Bind(R.id.iv_return)
    ImageView ivReturn;
    //标题
    @Bind(R.id.tv_title)
    TextView tvTitle;
    //持卡人姓名
    @Bind(R.id.et_confirm_name)
    EditText etConfirmName;
    //选择银行
    @Bind(R.id.spinner_confirm_bank)
    MaterialSpinner spinnerConfirmBank;
    //号码类别
    @Bind(R.id.tv_number_type)
    TextView tvNumberType;
    //银行卡号
    @Bind(R.id.et_confirm_bank_number)
    EditText etConfirmBankNumber;

    //内存中用户实体
    protected User mACacheUser = null;

    //初始化网络请求
    public UserManager mApiManager;

    //店铺认证的 信息
    private ShopConfirmMsg mConfirmMsg = null;

    //当前选择的 back 名称
    private String mBackName = "";

    private boolean flag = true;

    @Override
    protected void initUI() {
        setContentView(R.layout.act_shop_update_confirm);
        //网络请求接口 常驻方法
        mApiManager = mApiManager.getUserApiManager(this, this.getTaskId());
        //获取内存用户实体
        Gson gson = new Gson();
        mACacheUser = gson.fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);

        //设置状态栏为透明
        setThemeTransparent();
        //显示返回键
        ivReturn.setVisibility(View.VISIBLE);
        //设置标题
        tvTitle.setText("修改认证信息");
    }

    @Override
    protected void initData() {
        //TODO 获取店铺认证信息
        mApiManager.userConfirmMsg(mACacheUser.getId());
    }


    /**
     * 响应 获取店铺认证信息
     */
    @Subscriber(tag = Constant.BUS_SHOP_CONFIRM_MSG)
    public void onShopConfirmMsg(ShopConfirmMsg bean) {
        //获取店铺认证信息实体对象
        mConfirmMsg = bean;
        //设置持卡人姓名
        etConfirmName.setText(bean.getBankCardHolder());
        //设置银行卡号
        etConfirmBankNumber.setText(bean.getBankCardNum());
        //TODO 开始获取银行卡种类
        mApiManager.userBackList();
    }


    /**
     * 响应 银行卡种类
     */
    @Subscriber(tag = Constant.BUS_SHOP_BACK_LIST)
    public void onBackListError(List<Back> list) {
        if (flag){
            if (list != null && list.size() != 0) {
                //新建 list 数组，把名称提取出来
                List<String> backs = new ArrayList<>();
                //循环提取数据
                for (Back back : list) {
                    backs.add(back.getName());
                }
                //TODO 填充数据 到下拉列表中
                spinnerConfirmBank.setItems(backs);

                for (int i = 0;i<backs.size();i++){
                    if (list.get(i).getName().equals(mConfirmMsg.getBankCategory())){
                        //设置 点击默认值
                        mBackName = backs.get(i);
                        //设置列表默认选中值
                        spinnerConfirmBank.setSelectedIndex(i);
                    }
                }

                //设置 下拉列表最大高度
                if (backs.size()>0)
                    spinnerConfirmBank.setDropdownMaxHeight(500);

                //TODO 列表点击事件
                //监听事件
                spinnerConfirmBank.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() {
                    @Override
                    public void onItemSelected(MaterialSpinner view, int position, long id, String item) {
                        //获取item点击值
                        mBackName = item;
                        //清空卡号内容
                        etConfirmBankNumber.setText("");
                        //TODO 是否当前选择了 支付宝账号
                        switch (item) {

                            case "支付宝":
                                //设置 支付宝卡号标题
                                tvNumberType.setText("账            号：");
                                //设置内容文字
                                etConfirmBankNumber.setHint("请填写您的支付宝账号");
                                break;

                            default:
                                //设置 银行卡号标题
                                tvNumberType.setText("卡            号：");
                                //设置内容文字
                                etConfirmBankNumber.setHint("请填写您的银行卡号");
                                break;
                        }
                    }
                });
            }
            flag = false;
        }

    }

    /**
     * 按钮点击事件
     *
     * @return
     */
    @OnClick({R.id.iv_return, R.id.btn_update_confirm})
    public void onClick(View view) {
        switch (view.getId()) {

            case R.id.iv_return:                   //返回按钮
                finish();
                break;

            case R.id.btn_update_confirm:          //修改按钮
                initHttpShopSubmit();
                break;
        }
    }

    /**
     * 修改店铺信息
     */
    private void initHttpShopSubmit() {

        //银行卡号
        String backNumber = etConfirmBankNumber.getText().toString();

        /**
         * 1.判断每个字段非空
         * 2.开始修改店铺认证信息
         */
        if (backNumber.equals("")) {
            ToastUtils.showShort(this, "请您认真填写，全部内容不许为空！");
        } else {
            initShowTimeDialog("正在修改店铺认证信息，请稍后....", this);
            //开始 网络请求 修改店铺信息
            mApiManager.userUpdateConfirmMsg(mACacheUser.getId(),mConfirmMsg.getAuthenticationInfoId(),
                    backNumber,mBackName);
        }
    }

    /**
     * 响应 修改店铺信息 出错
     */
    @Subscriber(tag = Constant.BUS_SHOP_UPDATE_CONFIRM_MSG_ERROR)
    public void onShopUpdateSubmitError(String strError) {
        //延时 1s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                timeDialog.dismiss();
                //弹出提示
                ToastUtils.showShort(ShopUpdateConfirmActivity.this, "网络连接不稳定，请重试！");
            }
        }, 1000);
    }

    /**
     * 加载 修改店铺信息 返回结果
     */
    @Subscriber(tag = Constant.BUS_SHOP_UPDATE_CONFIRM_MSG)
    public void onShopUpdateSubmit(final State state) {
        //延时 1s
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //销毁弹窗
                timeDialog.dismiss();
                //返回值判断
                if (state.getState().equals("1"))
                    //修改成功，弹出提示框
                    initShowMsgDialog();
                else
                    ToastUtils.showShort(ShopUpdateConfirmActivity.this, state.getMsg());
            }
        }, 1000);
    }

    /**
     * 显示提示dialog
     */
    public void initShowMsgDialog() {
        //提示 dialog
        MaterialDialog mMsgDialog = new MaterialDialog.Builder(this)
                .title("修改成功")
                .content("恭喜您，店铺信息修改成功！")
                .positiveText("我知道了")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(MaterialDialog dialog, DialogAction which) {
                        //TODO 更新nei内存中的店铺信息 实体
                        mACacheUser.setIsCertified(Constant.SHOP_CONFIRM_AUDIT);
                        mACache.put(Constant.CACHE_USER, new Gson().toJson(mACacheUser));
                        //发送 通知 告诉 MyFragment 更新认证信息数据  "待审核"
                        EventBus.getDefault().post(Constant.SHOP_CONFIRM_AUDIT, Constant.BUS_JPUSH_SHOP_CONFIRM_TAG);
                        //销毁当前页面
                        finish();
                    }
                }).show();
        // 设置点击屏幕Dialog不消失
        mMsgDialog.setCanceledOnTouchOutside(false);
        //取消Back键监听
        mMsgDialog.setCancelable(false);
    }

}
